//
// Created by LiuYou on 2021/6/27.
//

#include <cstdlib>
#include <pthread.h>
#include <cstdio>
#include <cstring>
#include <unistd.h>

#define THR_NUM         4

static void* thr_func(void* pVoid) {
    int c = 'a' + *((int*) pVoid);
    while (true) {
        write(1, &c, 1);
    }

    pthread_exit(nullptr);
}

/**
 * @brief 强化对互斥量的理解。
 */
int main() {
    alarm(5);


    pthread_t tid[THR_NUM]{};

    // main线程创建了这么多线程。
    for (int i = 0; i < THR_NUM; ++i) {
        // TODO 注意: 在 C++中这里是有段错误的。
        //  通过调试将错误锁定在了这个强转这里。
        //  原因: C++不允许这样的强转。而 C是允许的。
        int err = pthread_create(tid + i, nullptr, thr_func, (void*) i);
//        int err = pthread_create(tid + i, nullptr, thr_func, static_cast<void*>(i));
//        int err = pthread_create(tid + i, nullptr, thr_func, (void*) i);
        if (err) {
            std::fprintf(stderr, "pthread_create(): %s\n", std::strerror(err));
            std::exit(EXIT_FAILURE);
        }
    }

    // main线程对创建的线程进行收尸。
    for (int i = 0; i < THR_NUM; ++i) {
        pthread_join(tid[i], nullptr);
    }


    std::exit(EXIT_SUCCESS);
}